
package com.zcp.pcsuitall;

import com.zcp.org.apache.commons.codec.binary.Base64;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

/**
 * 主要用来处理图片。
 */
public class PictureDealWith {
    /**
     * drawable图片PGN转换成String(Base64);
     * 
     * @param paramDrawable
     * @return
     */
    public static String drawableToString(Drawable paramDrawable) {
        if (paramDrawable == null) {
            return null;
        }
        Bitmap bitmap = drawableToBitmap(paramDrawable);

        byte[] result = bitmapToBytes(bitmap);

        return Base64.encodeBase64String(result);
//        return "hi";
    }
    
    public static String getStringFromBitmap( Bitmap bitmap)
    {
        byte[] result = bitmapToBytes(bitmap);

        return Base64.encodeBase64String(result);
    }

    /**
     * drawable 图片转换成bitmap图片。
     * 
     * @param drawable
     * @return
     */
    public static Bitmap drawableToBitmap(Drawable drawable) {

        // //从资源中获取
        // Resources res=getResources();
        // Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);

        // Bitmap.Config.ARGB_8888 表示透明度红绿蓝各占8位
        // Bitmap.Config.ALPHA_8 表示透明度8位,其它都是0
        // Bitmap.Config.ARGB_4444 表示有底色
        // Bitmap.Config.ARGB_565 表示双字节的，5位表示红，6位表示绿，最后5位表示蓝

        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable
                .getIntrinsicHeight(),
                drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                        : Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        drawable.draw(canvas);
        return bitmap;
    }

    /**
     * bitmap图片转换成byte[],格式是PNG
     * 
     * @param bm
     * @return
     */
    public static byte[] bitmapToBytes(Bitmap bm) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);// PNG压缩比很小，可以忽略压缩.
        try {
            // 确保所有的缓存都已经写入。
            baos.flush();
            return baos.toByteArray();
        } catch (IOException e) {
        }
        return null;

    }

     public static byte[] base64Decode(String src) {
     return Base64.decodeBase64(src);
     }
    
     public static Bitmap bytes2Bimap(byte[] b) {
     if (b == null || b.length == 0) {
     return null;
     }
     return BitmapFactory.decodeByteArray(b, 0, b.length);
     }
}
